Información General Detalles de la Prueba Otros Detalles
Examen: Final (Módulo SEO) Formato: Test 40 preg. (4 alt, 1 corr.) Puntos: Correcta:+0.25, Incorrecta:-1/12 (-0.0833), Nula/NC: 0
Fecha: 15 Mayo 2025 - 8:15H Curso: 1º DAW Calificación: 0-10
Duración: 1H Lugar: Salón Actos, Ed. Albéniz RA: RA5
ALUMNO/A: CALIF:.

Test: Elige la respuesta que es correcta

  1. ¿Cuál es el propósito de la línea soup = BeautifulSoup(response.text, "html.parser")?
a) Descargar los encabezados HTML desde el sitio web
b) Renderizar una página dinámica con JavaScript
c) Convertir el HTML recibido en un objeto manipulable por Python ✅
d) Buscar enlaces en la página
  1. Al iniciar un script de web scraping para análisis SEO, después de obtener el contenido HTML de una URL con requests.get(url).text y almacenarlo en codigo_html, ¿cuál es la forma correcta de parsear este contenido con BeautifulSoup?
a) soup = BeautifulSoup(codigo_html, 'lxml')
b) soup = BeautifulSoup.parse(codigo_html)
c) soup = BeautifulSoup(codigo_html, 'html.parser') ✅
d) soup = html.parser(codigo_html)
  1. Cuando buscas específicamente etiquetas <td> que tienen un atributo style con un valor exacto, por ejemplo, width: 14.8064%; height: 56px;, ¿cuál es la sintaxis correcta con find_all?
a) soup.find_all('td', style="width: 14.8064%; height: 56px;")
b) soup.find_all('td', attrs={'style': "width: 14.8064%; height: 56px;"}) ✅
c) soup.select('td[style="width: 14.8064%; height: 56px;"]')
d) soup.find_all(tag='td', attributes={'style': "width: 14.8064%; height: 56px;"})
  1. Para verificar si una página utiliza Schema.org a través de JSON-LD, ¿qué tipo de etiqueta y atributo buscarías principalmente con BeautifulSoup?
a) soup.find_all("script", type="application/javascript")
b) soup.find_all("meta", name="schema")
c) soup.find_all("script", type="application/ld+json") ✅
d) soup.find_all("div", class_="schema-org")
  1. ¿Qué hace la función get_text() en BeautifulSoup?
a) Elimina los enlaces
b) Extrae todo el texto visible del HTML  ✅
c) Extrae solo el contenido de imágenes
d) Corta el contenido
  1. soup.title.string.strip() ¿Qué hace este código cuando se ha extraído la información con BS4?
a) Elimina las etiquetas <title>
b) Devuelve el contenido de la etiqueta`<title> sin espacios  ✅
c) Reemplaza el título por vacío
d) Convierte el título en mayúsculas
  1. texto = soup.get_text().lower() ¿Qué hace en el contexto de BS4?
a) Extrae solo los títulos
b) Limpia HTML y pasa a minúsculas ✅
c) Convierte imágenes a texto
d) Cuenta párrafos
  1. ¿Qué tipo de palabras se eliminan para que el análisis sea útil en SEO?
a) Palabras largas y en inglés
b) Palabras muy técnicas
c) Palabras comunes sin valor semántico (stopwords) ✅
d) Palabras duplicadas dentro del HTML
  1. ¿Qué hace la línea ul = soup.find('ul', class_="listado carreras grado") en el contexto del scraping con BeautifulSoup?
a) Busca todos los elementos <ul> que contengan carreras de grado con cualquier clase.
b) Encuentra el primer elemento <ul> con la clase exacta "listado carreras grado" y lo asigna a ul. ✅
c) Extrae todos los elementos <li> con la clase "carreras grado" de una lista.
d) Encuentra todos los elementos <ul> que tengan una clase que contenga la palabra "listado".
  1. Busca el primer elemento
    en el documento HTML y lo asigna a div_tag.
a) div_tag = soup.find_all('div')[0]
b) div_tag = soup.select_one('div')
c) div_tag = soup.find('div') ✅
d) div_tag = soup.get('div')
  1. Retorna el primer elemento enlace de la URL.
a) link = soup.find_all('link')[0]
b) link = soup.select_one('a[href]')
c) link = soup.find('a') ✅
d) link = soup.get('a')
  1. ¿Qué análisis SEO podrías realizar con el siguiente código? soup.find_all('img', alt=False)
a) Verificar cuántas imágenes no tienen la etiqueta <img>
b) Detectar imágenes sin atributo alt, lo que afecta a la accesibilidad y SEO ✅
c) Encontrar imágenes grandes que ralentizan el sitio
d) Obtener imágenes con enlaces rotos
  1. ¿Qué permite detectar el siguiente código desde una perspectiva SEO? len(soup.find_all('h1'))
a) La cantidad de enlaces internos en el sitio
b) El número total de palabras clave en el texto
c) Si hay más de un <h1>, lo cual es un error estructural SEO ✅
d) La cantidad de títulos duplicados
  1. Después de haber parseado el HTML con BeautifulSoup (soup), ¿cómo determinarías de forma booleana si la etiqueta <meta name="description"> existe?
a) soup.find("meta", attrs={"name": "description"}) != None ✅
b) "description" in soup.find("meta").attrs
c) len(soup.select("meta[name='description']")) > 0
d) soup.meta_description.exists()
  1. Cómo verificarías con BeautifulSoup que una página HTML contiene exactamente una etiquecta <h1>
a) soup.find('h1') == 1
b) soup.select('h1') == 1
c) len(soup.find_all('h1')) == 1 ✅
d) soup.h1.count() == 1
  1. ¿Cuál es el propósito principal de usar if soup.title else "No encontrado" al intentar extraer el texto de un título?
a) Para asegurar que el título no exceda una longitud máxima.
✅ b) Para evitar un error AttributeError si la etiqueta title no existe en el HTML.
c) Para convertir el título a minúsculas.
d) Para añadir "No encontrado" si el título está vacío.
  1. Si estás comprobando enlaces internos rotos, y tienes una URL base https://example.com, un enlace como href="/pagina" se considera interno. ¿Cómo construirías la URL completa para hacer una petición requests.get() a este enlace relativo?
a) requests.get("/pagina")
b) requests.get("https://example.com" + "pagina")
c) requests.get_relative("https://example.com", "pagina")
✅ d) requests.get(urljoin("https://example.com", "/pagina"))
  1. ¿Qué detecta este código? no_alt = [img for img in soup.find_all('img') if not img.get('alt')]
a) Imágenes duplicadas
b) Imágenes grandes sin compresión
c) Imágenes sin texto alternativo, lo cual afecta a la accesibilidad y SEO ✅
d) Imágenes rotas
  1. ¿Qué hace requests.head(link, timeout=5) cuando se utiliza en un scraping SEO?
a) Obtiene solo los encabezados de la respuesta HTTP, sin el cuerpo del contenido.
b) Descarga completamente el contenido de la página web, lo que lo hace más eficiente que requests.get().
✅ c) Envía una solicitud HTTP de tipo HEAD para verificar si un enlace está roto y comprobar el tiempo de respuesta de la página.
d) Realiza una petición GET completa de la página web, incluyendo el contenido del cuerpo.
  1. ¿Qué se está verificando con la expresión urlparse(href).netloc == "" or urlparse(href).netloc == urlparse(url).netloc en un script de scraping SEO?
a) Que el enlace href apunta a una dirección HTTPS válida.
b) Que el enlace href está roto o devuelve error 404.
✅ c) Que el enlace href es interno 
d) Que el enlace href redirige automáticamente a la página de inicio del sitio.
  1. url ya está dada, qué estás haciendo con el siguiente fragmento de código? robots_url = url + "/robots.txt"; r = requests.get(robots_url)
a) Estás comprobando si el sitio web utiliza sitemap.xml correctamente.
b) Estás extrayendo el contenido HTML del archivo robots.html.
✅ c) Estás solicitando el archivo robots para analizar las directivas que indican qué partes del sitio pueden ser rastreadas por bots.
d) Estás accediendo al panel de administración del sitio para hacer login.
  1. ¿Cuál es el propósito de usar requests.get() junto con response.elapsed.total_seconds() en un análisis que impacte en el rendimiento SEO?
a) Para obtener el número de enlaces internos de la página.
b) Para verificar si la página redirige correctamente a HTTPS.
✅ c) Para medir el tiempo de carga del servidor (Time To First Byte), lo cual impacta en el rendimiento SEO.
d) Para analizar si las imágenes tienen el atributo alt.
  1. ¿Qué se está comprobando con parsed.netloc == parsed_base.netloc and not full_url.startswith("https://") en un análisis SEO técnico?
a) Que el enlace pertenece a otro dominio y no está bien enlazado con rel="nofollow".
b) Que el enlace tiene un protocolo FTP y no HTTP/HTTPS.
✅ c) Que el enlace es interno pero no usa HTTPS, lo cual puede afectar negativamente al SEO por falta de seguridad.
d) Que el enlace apunta a un recurso multimedia como una imagen o vídeo externo.
  1. ¿Qué puedes deducir si requests.head(link).status_code == 404 al auditar enlaces de una web?
a) Que el enlace se carga correctamente.
✅ b) Que el enlace está roto y no lleva a una página válida.
c) Que es un redireccionamiento interno.
d) Que el contenido está protegido por robots
  1. ¿Qué instrucción usarías para encontrar el que define la descripción de la página?
a) soup.find("meta", name="description")
b) soup.get("meta").description
✅ c) soup.find("meta", attrs={"name": "description"})
d) soup.find("meta[name='description']")